package com.kaifamiao.poly;

public class India extends Human {

    public India(String name) {
        super(name);
    }

    @Override
    public void eat(String food){
        logger.info( String.format("印度%s正在手抓着吃%s", name, food));
    }

    public static void main(String[] args) {
        // 引用变量 h 的类型是 Human (被称作【编译时类型】)
        // 但是，在运行期间，是将在堆中创建的 India实例 的首地址赋值给了 h 变量
        Human h = new India( "阿三" );

        // 运行期间，引用变量 h 所指向的实例的类型被称作 【运行时类型】
        // 通过调用 h 所指向实例的 getClass() 获得 该实例的类型
        Class c = h.getClass();
        System.out.println( c.getName() );

        // 在编译期间，编译器认为 eat 就是 Human 类中的实例方法
        // 但是，
        // 在运行期间 引用变量 h 指向了 India实例，因此实际调用是 India类中重写后的 eat 方法
        h.eat( "火锅" );
    }

}
